package net.esj.basic.core.engine.util.enumeration;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import net.esj.basic.pojo.EnumStructure;

@Deprecated
public abstract class AbstractEnumManager implements EnumProvider {

	private EnumProvider parentManager;

	@Override
	public List<EnumStructure> findEnum(String key) {
		List<EnumStructure> list = doFindEnum(key);
		if(( list == null || list == Collections.EMPTY_LIST) && parentManager!=null){
			return parentManager.findEnum(key);
		}
		if(list == null || list == Collections.EMPTY_LIST){
			return Collections.EMPTY_LIST;
		}
		return list;
	}

	@Override
	public List<EnumVo> findEnumVo(String key) {
		List<EnumStructure> struts = findEnum(key);
		List<EnumVo> list = new ArrayList<EnumVo>();
		for(EnumStructure str : struts){
			EnumVo vo = new EnumVo();
			vo.setId(str.getId());
			vo.setEnumCode(str.getEnumCode());
			vo.setEnumOrdinal(str.getEnumOrdinal());
			vo.setEnumTitle(str.getEnumTitle());
			vo.setEnumType(str.getEnumType());
			vo.setEnumValue(str.getEnumValue());
			list.add(vo);
		}
		return list;
	}

	@Override
	public EnumStructure getEnum(String key, String code) {
		EnumStructure es = doGetEnum(key,code);
		if(  es== null  && parentManager!=null){
			return parentManager.getEnum(key, code);
		}
		return es;
	}

	@Override
	public EnumVo getEnumVo(String key, String code) {
		EnumStructure str = getEnum(key, code);
		if(str!=null){
			EnumVo vo = new EnumVo();
			vo.setId(str.getId());
			vo.setEnumCode(str.getEnumCode());
			vo.setEnumOrdinal(str.getEnumOrdinal());
			vo.setEnumTitle(str.getEnumTitle());
			vo.setEnumType(str.getEnumType());
			vo.setEnumValue(str.getEnumValue());
			return vo;
		}
		return null;
	}

	/**
	 * 
	 * @param key
	 * @return null 则从panretManager中找
	 */
	protected abstract List<EnumStructure> doFindEnum(String key);
	
	protected abstract EnumStructure doGetEnum(String key,String code);

	public void setParentManager(EnumProvider parentManager) {
		this.parentManager = parentManager;
	}
	
}
